﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CheckDate
{
    /// <summary>
    /// 检查日期是否正确
    /// </summary>
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.BackgroundColor = ConsoleColor.DarkBlue;
            Console.ForegroundColor = ConsoleColor.Red;

            // 年份为1-9999
            // 月份1-12
            // 日： 1. 大月1、3、5、7、8、10、12    1-31天
            //         2.小月 4、6、9、11                      1-30天
            //         3.二月  闰年1-29    非闰年  1-28
            var year = 0;
            var month = 0;
            var day = 0;

            Console.Write("请输入年份（1-9999）：");            
            year =Convert.ToInt32( Console.ReadLine());

            // 检测年份是否为1-9999
            if (year < 1 || year > 9999)
            {
                Console.WriteLine("输入的年份不正确！");
            }
            else
            {
                //检测月份是否为1-12
                Console.Write("请输入月份（1-12）：");
                month = Convert.ToInt32(Console.ReadLine());
                if (month<1||month>12)
                {
                    Console.WriteLine("输入的月份不正确！");
                }
                else
                {
                    //按不同类型检测日期是否正确
                    // 大月
                    if(month==1|| month ==3 || month ==5 || month ==7 || month ==8 || month ==10 || month ==12)
                    {
                        Console.Write("请输入日期（1-31）：");
                        day = Convert.ToInt32(Console.ReadLine());
                        if(day<1||day>31)
                        {
                            Console.WriteLine("输入的日期不正确！");
                        }
                        else
                        {
                            Console.WriteLine("您输入的日期是{0}年{1}月{2}日！", year, month, day);
                        }
                    }
                    //小月
                    else if(month == 4 || month == 6 || month == 9 || month == 1)
                    {
                        Console.Write("请输入日期（1-30）：");
                        day = Convert.ToInt32(Console.ReadLine());
                        if (day < 1 || day > 30)
                        {
                            Console.WriteLine("输入的日期不正确！");
                        }
                        else
                        {
                            Console.WriteLine("您输入的日期是{0}年{1}月{2}日！", year, month, day);
                        }
                    }
                    else
                    {
                        //判断当年是否为闰年
                        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
                        {
                            Console.Write("请输入日期（1-29）：");
                            day = Convert.ToInt32(Console.ReadLine());
                            if (day < 1 || day > 29)
                            {
                                Console.WriteLine("输入的日期不正确！");
                            }
                            else
                            {
                                Console.WriteLine("您输入的日期是{0}年{1}月{2}日！", year, month, day);
                            }
                        }
                        else
                        {
                            Console.Write("请输入日期（1-28）：");
                            day = Convert.ToInt32(Console.ReadLine());
                            if (day < 1 || day > 28)
                            {
                                Console.WriteLine("输入的日期不正确！");
                            }
                            else
                            {
                                Console.WriteLine("您输入的日期是{0}年{1}月{2}日！", year, month, day);
                            }
                        }                       
                    }
                }
            }

            var dateString = year + "-" + month + "-" + day;
            Console.WriteLine("输入的日期格式化后为" + dateString);
            //把字符串转换为日期数据类型，便于使用日期操作的类库方法
            var date = DateTime.Parse(dateString);
            Console.WriteLine("长日期格式{0}",date.ToLongDateString());
            Console.WriteLine("短日期格式{0}" , date.ToShortDateString());
            Console.WriteLine("国际标准日期格式{0}" , date.ToUniversalTime());

            // 相差天数
            // 日期计算的类和方法  TimeSpan
            // now保存当前日期，通过DateTime.Now获取
            var now = DateTime.Now;
            var totalDays = new TimeSpan(date.Ticks - now.Ticks).TotalDays;
            Console.WriteLine("间隔的天数{0}", (int)totalDays);
            var totalHours = new TimeSpan(date.Ticks - now.Ticks).TotalHours;
            Console.WriteLine("间隔的小时数{0}", (int)totalHours);

            Console.ReadKey();
        }
    }
}
